-
Notifications
You must be signed in to change notification settings - Fork 384
feat: add @fast.maker decorator for reliable multi-step workflows #548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add @fast.maker decorator for reliable multi-step workflows #548
Conversation
1a00e74 to
6ac923d
Compare
Implement MAKER (Massively decomposed Agentic processes with K-voting Error Reduction) based on the paper "Solving a Million-Step LLM Task with Zero Errors" (arXiv:2511.09030). Key features: - First-to-ahead-by-k voting for consensus-based reliability - Red-flag filtering to discard suspicious responses - Multiple match strategies: exact, normalized, structured - Configurable k-margin and max_samples parameters This enables high reliability with cost-effective models by trading compute (multiple samples) for accuracy (statistical consensus). Includes: - MakerAgent workflow implementation - @fast.maker() decorator for easy integration - Comprehensive integration tests - Example demonstrating customer intent classification
6ac923d to
6b3f4b4
Compare
|
This is a very very cool feature. Couple of quick questions - I can imagine using this quite a lot - but not read the paper yet...!
|
Yes, "responders" are actually the ideal use case here. Since maker asks the same question multiple times to vote, you want fresh, independent attempts. If an agent keeps history, it might get confused being asked the same thing twice or introduce bias. Stateless responders prevent that perfectly. Parallel Overlap They solve different problems, I guess. Parallel is for doing different things at once speed/throughput), while Maker is for doing the same thing multiple times (redundancy/correctness). You can use them together, but one doesn't replace the other, thats my intuition on it. @evalstate you mentioned about a PR to review? Will you send the link, tks |
|
@lucidprogrammer Let me try to respond based on my understanding. I’ve partially addressed the child history control problem by introducing an explicit parameter: History / parallel controls supported:
In all cases, the history is taken from the main instance with the same agent name as the child, not directly from the orchestrator. I’m still thinking about whether it makes sense to add an option to pull history from the orchestrator when spawning child agents. You’re absolutely right that, in most cases, you want fresh, independent attempts. The original paper effectively assumes no retained history and passes all necessary information explicitly at call time. That said, I think there are legitimate cases where some accumulated history can be useful — for example, during a longer reasoning process where you reach a branching point and want to spawn N agents to vote on a decision. In that scenario, sharing a limited, relevant context might make sense. Regarding the overlap with parallel: I suspect the question isn’t whether one replaces the other (they clearly serve different purposes), but whether the execution machinery can be shared. From an implementation perspective:
is essentially the same core logic. So I think there’s a good opportunity to reuse or unify the execution layer, while keeping the result-handling logic separate. |

Description
Adds
@fast.makerdecorator implementing MAKER reliability patterns from "Solving a Million-Step LLM Task with Zero Errors".Enables zero-error multi-step workflows through k-threshold voting and red-flag validation.
Key Features
exact,normalizedlast_resultUsage
When to Use
Testing
8 integration tests covering voting, red-flagging, and match strategies
Example in examples/workflows/maker.py
Checklist